package com.xored.glance.ui.controls.decor;

import org.eclipse.jface.util.Policy;
import org.eclipse.swt.custom.StyleRange;
import org.eclipse.swt.graphics.Color;
import org.eclipse.swt.graphics.Font;
import org.eclipse.swt.graphics.Image;
import org.eclipse.swt.graphics.Rectangle;
import org.eclipse.swt.widgets.Item;

import com.xored.glance.ui.utils.TextUtils;

public abstract class StructCell extends Cell {

	static final StyleRange[] NO_STYLES = new StyleRange[0];

	static final String KEY_TEXT_LAYOUT = Policy.JFACE + "styled_label_key_"; //$NON-NLS-1$

	public StyleRange[] styles = NO_STYLES;

	public StructCell(int column) {
		super(column);
	}

	public abstract Rectangle getBounds();

	public abstract Color getForeground();

	public abstract Color getBackground();

	public abstract Image getImage();

	public abstract Rectangle getImageBounds();

	public abstract Rectangle getTextBounds();

	public abstract String getText();

	public abstract Font getFont();

	@Override
	protected Object getElement() {
		return getItem();
	}

	protected abstract Item getItem();

	protected StyleRange[] nativeStyles() {
		String key = KEY_TEXT_LAYOUT + getColumn();
		Object data = getItem().getData(key);
		if (data instanceof StyleRange[]) {
			return TextUtils.copy((StyleRange[]) data);
		}
		return new StyleRange[0];
	}

}
